package 枚举;

import java.lang.reflect.Constructor;


// 自己写的枚举类，默认继承自Enum,所以自己写的枚举类需要帮助父类进行构造
public enum TestEnum2 {
    //这4个都是枚举对象，当为有参构造方法时，需要传入对应参数
    RED("red",1),BLACK("black",2),
    GREEN("green",3),WHITE("white",4);

    private String name;
    private int original;

    //注意！！！！！ 枚举的构造方法 默认是 私有的！！！！
    TestEnum2(String name, int original) {
        //super(name,ordinal)
        this.name = name;
        this.original = original;
    }

    public static void reflectPrivateConstructor() {
        try {
            //1.通过反射获取Class对象
            Class<?> c = Class.forName("枚举.TestEnum2");
            //2.通过反射获取构造方法
            Constructor<?> constructor = c.getDeclaredConstructor(String.class, int.class,String.class,int.class);
            //改变构造方法的权限
            constructor.setAccessible(true);

            //3.获取对应实例
            TestEnum2 testEnum2 = (TestEnum2) constructor.newInstance("sj", 18,"123",456);

            System.out.println(testEnum2);

        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        reflectPrivateConstructor();
    }
}
